<?php

namespace Mouta\SeowebBundle\Controller;

use Symfony\Bundle\FrameworkBundle\Controller\Controller;
use Symfony\Component\Security\Core\SecurityContext;
use Mouta\SeowebBundle\Entity\Usuario;
use Mouta\SeowebBundle\Entity\Pagina;
use Mouta\SeowebBundle\Entity\Categoria;
use Mouta\SeowebBundle\Entity\Asignacion;
use Mouta\SeowebBundle\Entity\Servicio;
use Mouta\SeowebBundle\Entity\Click;
use Mouta\SeowebBundle\Form\UsuarioType;
use Mouta\SeowebBundle\Form\ContactoType;
use Mouta\SeowebBundle\Form\DatosUserType;
use Mouta\SeowebBundle\Form\SitioType;
use Mouta\SeowebBundle\Form\CategoriaType;
use Mouta\SeowebBundle\Form\SitiomodType;
use Mouta\SeowebBundle\Form\CreditoType;
use Symfony\Component\Security\Core\Authentication\Token\UsernamePasswordToken;

class PaginaController extends Controller
{
    public function mis_sitiosAction()
    {
        $usuario = $this->get('security.context')->getToken()->getUser();

        $paginator = $this->get('knp_paginator');

        $em = $this->getDoctrine()->getEntityManager();
        $query = $em->createQuery('SELECT p FROM SeowebBundle:Pagina p
                                        WHERE p.usuario = :usuario');
        $query->setParameter('usuario', $usuario);

        $paginas = $paginator->paginate($query,$this->get('request')->query->get('page', 1),3);

        return $this->render('SeowebBundle:Pagina:mis_sitios.html.twig', array(
            'paginator' => $paginator,
            'paginas' => $paginas,
        ));
    }

    public function agregar_sitioAction()
    {

        $peticion = $this->getRequest();
        $pagina = new Pagina();
        $formulario = $this->createForm(new SitioType(), $pagina);

        $usuario = $this->get('security.context')->getToken()->getUser();






        if ($peticion->getMethod() == 'POST')
        {

            $formulario->bindRequest($peticion);

            if($formulario->isValid())
            {
                $pagina->setUsuario($usuario);
                $em = $this->getDoctrine()->getEntityManager();
                $em->persist($pagina);
                $paginarepetida = $em->getRepository('SeowebBundle:Pagina')->findOneBy(array(
                    'url' => $pagina->getUrl()
                ));
                $nombrerepetido = $em->getRepository('SeowebBundle:Pagina')->findOneBy(array(
                    'nombre' => $pagina->getNombre()
                ));
                if($paginarepetida){

                    $this->get('session')->setFlash('info',
                        'Este sitio ya esta en uso'
                    );

                    return $this->redirect($this->generateUrl('agregar_sitio'));
                }else{

                    if($nombrerepetido){

                        $this->get('session')->setFlash('info',
                            'Este nombre ya esta en uso'
                        );

                        return $this->redirect($this->generateUrl('agregar_sitio'));
                    }else{

                        $existe = @file_get_contents($pagina->getUrl());
                        if($existe){
                            
                            $em->flush();

                            $credito = '0';
                            $serviciomegusta = $em->getRepository('SeowebBundle:Servicio')->find('1');

                            $asignacion = new Asignacion();
                            $asignacion->setCredito($credito);
                            $asignacion->setPagina($pagina);
                            $asignacion->setServicio($serviciomegusta);
                            $em->persist($asignacion);
                            $em->flush();


                            $this->get('session')->setFlash('info',
                                'El sitio se a creado correctamente'
                            );


                            return $this->redirect($this->generateUrl('mis_sitios'));


                        }else{



                            $this->get('session')->setFlash('info',
                                'Esta URL no existe'
                            );
                            return $this->redirect($this->generateUrl('agregar_sitio'));

                        }
                    }
                }
            }
        }

        return $this->render(
            'SeowebBundle:Pagina:agregar_sitio.html.twig',
            array('formulario' => $formulario->createView())
        );

    }
    public function borrar_sitioAction($id)
    {

        $em = $this->getDoctrine()->getEntityManager();
        $usuario = $this->get('security.context')->getToken()->getUser();
        $pagina = $em->getRepository('SeowebBundle:Pagina')->find($id);
        if($usuario == $pagina->getUsuario()){
            $asignacionmegusta = $em->getRepository('SeowebBundle:Asignacion')->findOneBy(array(
                'pagina' => $id,
                "servicio" => '1'
            ));
            $creditoenmegusta = $asignacionmegusta->getCredito();
            $em->remove($asignacionmegusta);
            $em->flush();

            $asignacionmasuno = $em->getRepository('SeowebBundle:Asignacion')->findOneBy(array(
                'pagina' => $id,
                "servicio" => '2'
            ));
            $creditoenmasuno = $asignacionmasuno->getCredito();
            $em->remove($asignacionmasuno);
            $em->flush();
            $usuario->setCredito($usuario->getCredito() + $creditoenmegusta + $creditoenmasuno);


            $em->remove($pagina);
            $em->flush();
            $this->get('session')->setFlash('info','El sitio se a borrado correctamente');
            return $this->redirect($this->generateUrl('mis_sitios'));
        }else{
            $this->get('session')->setFlash('info','Este sitio no le pertenece, por lo tanto no lo puede borrar');
            return $this->redirect($this->generateUrl('mis_sitios'));
        }
    }

    public function modificar_sitioAction($id)
    {
        $peticion = $this->getRequest();
        $em = $this->getDoctrine()->getEntityManager();
        $pagina = $em->getRepository('SeowebBundle:Pagina')->find($id);
        $formulario = $this->createForm(new SitioType(), $pagina);
        $formulario->remove('url');
        $formulario->remove('nombre');



        if ($peticion->getMethod() == 'POST')
        {

            $formulario->bindRequest($peticion);

            if($formulario->isValid())
            {

                $usuario = $this->get('security.context')->getToken()->getUser();
                if($usuario == $pagina->getUsuario()){

                    $em->persist($pagina);
                    $em->flush();
                    $this->get('session')->setFlash('info',
                        'Los datos se han modificado correctamente'
                    );

                    return $this->redirect($this->generateUrl('mis_sitios'));
                }else{
                    $this->get('session')->setFlash('info','Este sitio no le pertenece, por lo tanto no lo puede modificar');
                    return $this->redirect($this->generateUrl('mis_sitios'));
                }
            }
        }

        return $this->render(
            'SeowebBundle:Pagina:modificar_sitio.html.twig',
            array('formulario' => $formulario->createView(),
                'id' => $id,
            ));

    }

    public function sitioAction($nombre)
    {

        $em = $this->getDoctrine()->getEntityManager();


        $pagina = $em->getRepository('SeowebBundle:Pagina')->findOneBy(array(
            'slug' => $nombre
        ));


        return $this->render('SeowebBundle:Pagina:sitio.html.twig', array(
            'pagina' => $pagina,
        ));
    }

    public function sitiosAction()
    {
        $usuario = $this->get('security.context')->getToken()->getUser();
        $id_usuario = $usuario->getId();

        $paginator = $this->get('knp_paginator');

        $em = $this->getDoctrine()->getEntityManager();
        $query = $em->createQuery('SELECT p FROM SeowebBundle:Pagina p');


        $paginas = $paginator->paginate($query,$this->get('request')->query->get('page', 1),3);

        return $this->render('SeowebBundle:Pagina:sitios.html.twig', array(
            'paginator' => $paginator,
            'paginas' => $paginas,
        ));
    }

    public function homeAction()
    {

        $paginator = $this->get('knp_paginator');

        $em = $this->getDoctrine()->getEntityManager();
        $query = $em->createQuery('SELECT p FROM SeowebBundle:Pagina p ORDER BY p.id DESC');


        $paginas = $paginator->paginate($query,$this->get('request')->query->get('page', 1),5);

        $categorias = $em->getRepository('SeowebBundle:Categoria')->findAll();

        return $this->render('SeowebBundle:Pagina:ultimos_sitios.html.twig', array(
            'paginator' => $paginator,
            'paginas' => $paginas,
            'categorias' => $categorias
        ));
    }

    public function ultimos_sitiosAction($nombre)
    {

        $paginator = $this->get('knp_paginator');

        $em = $this->getDoctrine()->getEntityManager();
        $query = $em->createQuery('SELECT p FROM SeowebBundle:Pagina p
                                            JOIN p.categoria c
                                            WHERE c.slug = :categoria
                                            ');
        $query->setParameter('categoria' , $nombre);


        $paginas = $paginator->paginate($query,$this->get('request')->query->get('page', 1),5);

        $categorias = $em->getRepository('SeowebBundle:Categoria')->findAll();

        return $this->render('SeowebBundle:Pagina:ultimos_sitios.html.twig', array(
            'paginator' => $paginator,
            'paginas' => $paginas,
            'categorias' => $categorias
        ));
    }

    public function crear_categoriaAction()
    {

        $em = $this->getDoctrine()->getEntityManager();
        $peticion = $this->getRequest();
        $formulario = $this->createForm(new CategoriaType());

        if ($peticion->getMethod() == 'POST')
        {
            $formulario->bindRequest($peticion);

            if($formulario->isValid())
            {
                $data = $formulario->getData();

                $cat = $data["categoria"];

                $categoria = new Categoria;
                $categoria->setNombre($cat);
                $em->persist($categoria);
                $em->flush();

                $this->get('session')->setFlash('info',
                    'Categoria creada'
                );

                return $this->render('SeowebBundle:Pagina:home.html.twig');

            }


        }

        return $this->render(
            'SeowebBundle:Pagina:crear_categoria.html.twig',
            array('formulario'=> $formulario->createView())

        );
    }

}